package com.test.exercise;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import org.junit.Test;
/**
 * description: 遍历Map集合效率比较
 * @version v1.0
 * @author w
 * @date 2018年10月23日上午11:20:08
 */
public class ForeachMap {
	
	/**
	 * description: 初始化map集合中元素
	 * @param map
	 * @version v1.0
	 * @author w
	 * @date 2018年10月23日 下午2:45:35
	 */
	public void init(Map<Integer, String> map){
		// 初始化map集合中元素的个数
		int count = 1000000;
		for (int i = 1; i <= count; i++) {
			map.put(i, i+ " ---> map");
		}
	}
	
	@Test
	public void test(){
		Map<Integer, String> map = new HashMap<>();
		Map<Integer, String> map2 = new HashMap<>();
	
		long start = System.currentTimeMillis();
		init(map);
		init(map2);
		System.out.println("装载map耗时： "+(System.currentTimeMillis()-start)+ " ms");
		
		start = System.currentTimeMillis();
		foreachKeyset(map);
		System.out.println("foreachKeyset 遍历 map耗时： "+(System.currentTimeMillis()-start)+ " ms");
		
		start = System.currentTimeMillis();
		foreachEntry(map2);
		System.out.println("foreachEntry 遍历 map耗时： "+(System.currentTimeMillis()-start)+ " ms");
		
		start = System.currentTimeMillis();
		iteratorEntry(map2);
		System.out.println("iteratorEntry 遍历 map耗时： "+(System.currentTimeMillis()-start)+ " ms");
	
		System.out.println(map.size());
	}
	
	/**
	 * description: 根据 key 找 value 
	 * @param map
	 * @version v1.0
	 * @author w
	 * @date 2018年10月23日 下午5:10:01
	 */
	private void foreachKeyset(Map<Integer, String> map) {
		for(Integer key : map.keySet()){
			String value = map.get(key);
			// System.out.println("foreachKeyset : key :" + key + "---> value :"+ value);
		}
	}
	
	/**
	 * description: 根据 key--value 键值对 找键和值 ( foreach 遍历)
	 * @param map
	 * @version v1.0
	 * @author w
	 * @date 2018年10月23日 下午5:19:31
	 */
	private void foreachEntry(Map<Integer, String> map) {
		for(Entry<Integer, String> entry : map.entrySet()){
		//	System.out.println("foreachEntry : key :" + entry.getKey() + "---> value :"+entry.getValue());
		}
	}
	
	/**
	 * description: 根据 key--value 键值对 找键和值 ( iterator 遍历)
	 * @param map
	 * @version v1.0
	 * @author w
	 * @date 2018年10月23日 下午5:19:01
	 */
	private void iteratorEntry(Map<Integer, String> map) {
		Iterator<Entry<Integer, String>> iterator = map.entrySet().iterator();
		while(iterator.hasNext()){
			Entry<Integer, String> entry = iterator.next();
		//	System.out.println("iteratorEntry : key :" + entry.getKey() + "---> value :"+entry.getValue());
		}
	}
}
